export interface SearchParams{
  title: string | null;
  difficulty: number | null;
}

export interface AddRequest{
  title: string;
  description: string;
  difficulty: number;
  judgeConfig: JudgeConfig;
  inputDescription: string;
  outputDescription: string;
  sampleInput: string;
  sampleOutput: string;
  hint: string | null;
  judgeCases: JudgeCase[];
  createdUserId: string;
}

export interface SearchByAdminParams{
  title: string | null;
  difficulty: number | null;
  createdUserId: string | null;
  visible: number | null;
}

export interface UpdateParams{
  problemId: string;
  title: string;
  description: string;
  difficulty: number;
  judgeConfig: JudgeConfig;
  inputDescription: string;
  outputDescription: string;
  sampleInput: string;
  sampleOutput: string;
  hint: string;
  judgeCases: JudgeCase[];
}

export interface JudgeConfig{
  timeLimit: number;
  memoryLimit: number;
}

export interface JudgeCase{
  input: string;
  output: string;
}

export interface ProblemVO{
  id: string;
  title: string;
  description: string;
  difficulty: number;
  judgeConfig: JudgeConfig;
  inputDescription: string;
  outputDescription: string;
  sampleInput: string;
  sampleOutput: string;
  hint: string;
  submissionCount:number;
  acceptedCount: number;
}

export interface AdminProblemVO{
  id: string;
  title: string;
  description: string;
  difficulty: number;
  judgeConfig: JudgeConfig;
  judgeCases: JudgeCase[];
  inputDescription: string;
  outputDescription: string;
  sampleInput: string;
  sampleOutput: string;
  hint: string;
  createdUserId: string;
  visible: number;
  submissionCount:number;
  acceptedCount: number;
  createTime: string;
  updateTime: string;
}

export interface ExecuteCodeRequest{
  problemId: string;
  code: string;
  language: string;
}
